package br.com.speedprevweb.dao.impl;

import br.com.speedprevweb.dao.TipoBeneficioDao;
import br.com.speedprevweb.model.TipoBeneficio;
import br.com.speedprevweb.util.HibernateUtil;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class TipoBeneficioDaoImpl implements TipoBeneficioDao {
  
  private boolean valid(TipoBeneficio tipoBeneficio) {
    if (tipoBeneficio.getCdTipoBeneficio().isEmpty()) {
      return false;
    } else {
      return !tipoBeneficio.getDsTipoBeneficio().isEmpty();
    }
  }

  @Override
  public void salvar(TipoBeneficio tipoBeneficio) {
    Session session = null;
    Transaction t = null;

    try {
      session = HibernateUtil.getSessionFactory().openSession();
      t = session.beginTransaction();
      session.save(tipoBeneficio);
      t.commit();
    } catch(RuntimeException e) {
      try {
        t.rollback();
      } catch (RuntimeException rbe) {
        //log.error("Não foi possível reverter transação");
        System.out.println("Não foi possível reverter transação");
      } throw e;
    } finally {
      if (session != null) {
        session.close();
      }
    }
  }

  @Override
  public void alterar(TipoBeneficio tipoBeneficio) {
    Session session = null;
    Transaction t = null;
    
    try {
      session = HibernateUtil.getSessionFactory().openSession();
      t = session.beginTransaction();
      session.update(tipoBeneficio);
      t.commit();
    } catch (RuntimeException e) {
      try {
        t.rollback();
      } catch (RuntimeException rbe) {
        System.out.println("Não foi possível reverter transação");
        throw e;
      } finally {
        if (session != null) {
          session.close();
        }  
      }
    }    
  }

  @Override
  public void excluir(TipoBeneficio tipoBeneficio) {
    Session session = null;
    Transaction t = null;
    
    try {
      session = HibernateUtil.getSessionFactory().openSession();
      t = session.beginTransaction();
      session.delete(tipoBeneficio);
      t.commit();
    } catch (RuntimeException e) {
      try {
        t.rollback();
      } catch (RuntimeException rbe) {
        System.out.println("Não foi possível reverter transação");
        throw e;
      }
    } finally {
      session.close();
    }      
  }

  @Override
  public TipoBeneficio getTipoBeneficio(long idTipoBeneficio) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    return (TipoBeneficio) session.load(TipoBeneficio.class, idTipoBeneficio);
  }

  @Override
  public List<TipoBeneficio> listarTodos() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    List<TipoBeneficio> lista = session.createQuery("FROM TipoBeneficio tr order by tr.dsTipoBeneficio").list();
    t.commit();
    session.close();
    return lista;
  }  
}
